package xpn.platform.modules.workflow.runtime.todo;

import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import xpn.platform.common.persistence.AbstractBaseEntity;
import xpn.platform.modules.workflow.definition.state.State;
import xpn.platform.modules.workflow.runtime.instance.Instance;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.util.Date;

/*
 * 待办事项：表示一个执行者在流程实例的指定状态下的待办事项。
 * 一个执行者在一个流程实例中可能有多个待办事项，但在一个状态下，只能有一个待办事项。
 * 执行者可能是用户，也可能是一个应用系统。
 *
 */

@Entity
@Table(name = "wf_ru_todo")
@Getter
@Setter
public class Todo extends AbstractBaseEntity {

    private static final long serialVersionUID = -3121546410394640227L;

    @ManyToOne
    @JoinColumn(nullable = false)
    @NotNull
    private Instance instance; // 所属流程实例

    @Length(min = 1, max = 40)
    @NotNull
    private String executorId; // 执行者的id


    private String executorName; // 执行者的id

    @ManyToOne
    @JoinColumn(nullable = false)
    @NotNull
    private State state; // 待办事项所属状态。

    private String batchNumber; // 批次号，用于等待、代表进行判断是否同一批次

    private Boolean completed = true; // 是否完成

    private Integer emergency;// 紧急程度或优先级 值越大优先级越高

    private Date deadLine;  //2018-10-12 zyk 办理时限

    private Long timeLimit;//时限 秒钟

    public String getStateName() {
        return state == null ? "" : state.getName();
    }

}
